import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType, DateType}
import org.apache.spark.sql.Row
import java.text.SimpleDateFormat

// 创建并加载数据
val employeeRDD = spark.sparkContext.textFile("path/to/employee_data.txt")

// 显示原始RDD的前几行数据以验证数据加载正确
employeeRDD.take(5).foreach(println)

// 定义Schema（这里假设数据格式为：ID,Name,Age,Gender,JoinDate）
val schema = new StructType()
  .add("ID", IntegerType)
  .add("Name", StringType)
  .add("Age", IntegerType)
  .add("Gender", StringType)
  .add("JoinDate", StringType)

// 将原始文本RDD转换为DataFrame
val employeeDF = spark.createDataFrame(employeeRDD.map(_.split(",")).map(r => Row(r(0).toInt, r(1), r(2).toInt, r(3), r(4))), schema)

// 显示转换后的DataFrame的表结构和前几行数据
employeeDF.printSchema()
employeeDF.show(5)

// 使用DataFrame API进行数据清洗和分析操作：将“JoinDate”列转换为日期类型
val dateFormat = new SimpleDateFormat("yyyy-MM-dd") // 假设日期格式为"yyyy-MM-dd"
val parsedDF = employeeDF.withColumn("JoinDate", to_date($"JoinDate", dateFormat.toPattern()))

// 计算公司员工的平均年龄
val avgAge = parsedDF.agg(avg($"Age")).head().getAs[Double](0)
println(s"Average Age: $avgAge")

// 按性别分组统计员工数量
val genderCountDF = parsedDF.groupBy("Gender").count()
genderCountDF.show()
